package com.shenda.device.handler.handlers;

import com.shenda.device.handler.Handler;
import com.shenda.device.message.RespMsg;

/**
 * 设置处理器的通用方法
 * 
 * @author lifeng
 */
public abstract class AbstractHandler implements Handler {

	Handler next;

	/**
	 * 处理消息
	 */
	@Override
	public void doHandle(RespMsg resp) {

		// 是否处理此响应 -- 可以多分处理器一起处理
		if (this.supportCmds(resp)) {
			this.doInnerHandle(resp);
			return;
		}

		// 交给下一处理器处理
		if (this.next != null) {
			this.next.doHandle(resp);
		}
	}

	/**
	 * 支持的响应
	 * 
	 * @param resp
	 */
	protected abstract boolean supportCmds(RespMsg resp);

	/**
	 * 处理响应
	 * 
	 * @param resp
	 */
	protected abstract void doInnerHandle(RespMsg resp);

	/**
	 * 构建处理链
	 */
	@Override
	public Handler chain(Handler next) {
		this.next = next;
		return next;
	}
}